home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 03 - 1987 / 03.09 Sep 87 / kelly basic source / Inside Mac Sample2.BAS < prev    next >
Encoding:
BASIC Source File  |  1987-07-22  |  3.9 KB  |  175 lines  |  [TEXT/ZBAS]

  1. REM Sample Demo (adapted from Inside Macintosh)
  2. REM ©MacTutor 1987
  3. REM By Dave Kelly
  4.  
  5. WINDOW OFF
  6. COORDINATE WINDOW
  7. DEF MOUSE=-1
  8. everyevent=-1:REM ALL events
  9. False=0:True=NOT False:doneflag=False
  10. REM Setup the EventRecord
  11. myEvent%=0:REM 'what' is first variable
  12. message&=0
  13. when&=0
  14. where&=0
  15. modifiers=0
  16. applemark=&H14
  17. whichwindow&=0
  18. DIM Rect%(3),windowrect%(3)
  19. charCodeMask&=VAL("&H000000FF")
  20. keyCodeMask&= VAL("&H0000FF00")
  21. FLUSHEVENTS
  22. GOSUB "SetUpMenus"
  23. WMgrPort&=PEEK LONG(&H9DE)
  24. PortRecttop=PEEK WORD(WMgrPort&+8)
  25. PortRectleft=PEEK WORD(WMgrPort&+10)
  26. PortRectbottom=PEEK WORD(WMgrPort&+12)
  27. PortRectright=PEEK WORD(WMgrPort&+14)
  28. dragtop=PortRecttop+24
  29. dragleft=PortRectleft+4
  30. dragbottom=PortRectbottom-4
  31. dragright=PortRectright-4
  32. CALL SETRECT(windowrect%(0),dragleft,dragtop+20,dragright-4,dragbottom-4)
  33. myWindow&=FN NEWWINDOW(0,windowrect%(0),"Sample Window",1,0,1,0,0)
  34. CALL SETPORT(myWindow&)
  35. CALL GETPORT(GrfPtr&)
  36. txRect1&=PEEK LONG(GrfPtr&+16)
  37. txRect2&=PEEK LONG(GrfPtr&+20)
  38. CALL INSETRECT(txRect1&,4,2)
  39. textH&=FN TENEW(txRect1&,txRect1&)
  40.  
  41. "EventLoop": REM Main Event Loop
  42. DO
  43. CALL SYSTEMTASK
  44. CALL TEIDLE(textH&)
  45. CALL SETRECT(Rect%(0),PEEK WORD (GrfPtr&+16),PEEK WORD (GrfPtr&+18),PEEK WORD (GrfPtr&+20),PEEK WORD (GrfPtr&+22))
  46. click=MOUSE(0):xpos=MOUSE(1):ypos=MOUSE(2)
  47. InRectangle=FN PTINRECT(xpos,Rect%(0))
  48. IF InRectangle THEN CURSOR 1 ELSE CURSOR 0
  49. LONG IF FN GETNEXTEVENT(everyevent,myEvent%)
  50. SELECT myEvent%
  51. CASE 0    :REM No Event
  52. CASE 1    :REM mousedown
  53. wResult=FN FINDWINDOW(where&,whichwindow&)
  54. SELECT wResult
  55. CASE 0    :REM inDesk (do nothing)
  56. CASE 1    :REM inMenuBar
  57. mResult&=FN MENUSELECT(where&)
  58. GOSUB "DoCommand"
  59. CASE 2    :REM inSysWindow
  60. CALL SYSTEMCLICK(myEvent%,whichwindow&)
  61. CASE 3    :REM inContent
  62. LONG IF whichwindow& <> FN FRONTWINDOW
  63. CALL SELECTWINDOW(whichwindow&)
  64. XELSE
  65. CALL GLOBALTOLOCAL(where&)
  66. boolean=FN BITAND(modifiers,512)<>0
  67. CALL TECLICK(where&,boolean,textH&)
  68. END IF
  69. CASE 4    :REM inDrag
  70. LONG IF whichwindow&<>FN FRONTWINDOW
  71. CALL SELECTWINDOW(whichwindow&)
  72. XELSE
  73. CALL DRAGWINDOW(whichwindow&, where&,dragtop)
  74. END IF
  75.  
  76. CASE 5    :REM inGrow
  77. CASE 6    :REM inGoAway
  78. END SELECT
  79. CASE 2    :REM mouseup
  80. CASE 3,5    :REM keydown or autokey
  81. theChar&=FN BITAND(message&,charCodeMask&)
  82. LONG IF FN BITAND(modifiers,256)<>0
  83. mResult&=FN MENUKEY(theChar&)
  84. GOSUB "DoCommand"
  85. XELSE
  86. CALL TEKEY(theChar&,textH&)
  87. END IF
  88. CASE 4    :REM keyup
  89. CASE 6    :REM updateEvt
  90. CALL BEGINUPDATE(message&)
  91. CALL ERASERECT(txRect1&)
  92. CALL TEUPDATE(txRect1&,textH&)
  93. CALL ENDUPDATE(message&)
  94. CASE 7    :REM diskEvt
  95. CASE 8    :REM activateEvt
  96. LONG IF FN BITAND(modifiers,1)<>0
  97. CALL TEACTIVATE(textH&)
  98. CALL DISABLEITEM(Mhndl2&,1)
  99. XELSE
  100. CALL TEDEACTIVATE(textH&)
  101. CALL ENABLEITEM(Mhndl2&,1)
  102. END IF
  103. CASE 10    :REM networkEvt
  104. CASE 11    :REM driverEvt
  105. CASE 12    :REM app1Evt
  106. CASE 13    :REM app2Evt
  107. CASE 14    :REM app3Evt
  108. CASE 15    :REM app4Evt
  109. CASE ELSE
  110. END SELECT
  111. END IF
  112. UNTIL doneflag
  113. END
  114. "SetUpMenus"
  115. APPLE MENU "About Sample"
  116. MENU 1,0,1,"File"
  117. MENU 1,1,1,"Quit/Q"
  118. Mhndl1&=FN GETMHANDLE(1)
  119. EDIT MENU 2
  120. Mhndl2&=FN GETMHANDLE(130)
  121. Mhndl0&=FN GETMHANDLE(255)
  122. RETURN
  123. "DoCommand"
  124. theMenu=FN HIWORD(mResult&)
  125. theItem=FN LOWORD(mResult&)
  126. SELECT theMenu
  127. CASE 255
  128. GOSUB "appleID"
  129. CASE 1
  130. GOSUB "fileID"
  131. CASE 2
  132. GOSUB "editID"
  133. END SELECT
  134. CALL HILITEMENU(0)
  135. RETURN
  136. "appleID"
  137. LONG IF theItem=1
  138. WINDOW 5,"",(100,100)-(400,250),-2
  139. TEXT 0,12,0,0
  140. PRINT @(2,2)"Sample adapted from Inside Macintosh"
  141. PRINT @(10,3)"by"
  142. PRINT @(8,4)"Dave Kelly"
  143. PRINT @(6,5)"©MacTutor, 1987"
  144. MOUSE ON
  145. DO
  146. x=MOUSE(0)
  147. outsiderect=(MOUSE(1)<0 OR MOUSE(1)>300 OR MOUSE(2)<0 OR MOUSE(2)>150)
  148. UNTIL x<>0 AND NOT (outsiderect)
  149. MOUSE OFF
  150. WINDOW CLOSE 5
  151. XELSE
  152. CALL GETITEM(Mhndl0&,theItem,Var$)
  153. mrefNum=FN OPENDESKACC(Var$)
  154. CALL SETPORT(myWindow&)
  155. END IF
  156. RETURN
  157. "fileID"
  158. doneflag=True
  159. RETURN
  160. "editID"
  161. LONG IF NOT FN SYSTEMEDIT(theItem-1)
  162. SELECT theItem
  163. CASE 1:REM undo command
  164. CASE 3:REM cut command
  165. CALL TECUT(textH&)
  166. CASE 4:REM copy command
  167. CALL TECOPY(textH&)
  168. CASE 5:REM paste command
  169. CALL TEPASTE(textH&)
  170. CASE 6:REM clear command
  171. CALL TEDELETE(textH&)
  172. END SELECT
  173. END IF
  174. RETURN
  175.